package kiosk;

/**
 * Importeringer
 */
import java.util.ArrayList;
import java.io.Serializable;

/**
 * Klasse: ProduktListe
 * @author  RK
 * @version 1.0
 * -------------------------
 * Sist endret: 22 Mars 2010
 */
public class ProduktListe implements Serializable {

    private ArrayList produkter;

    public ProduktListe()
    {
        this.produkter = new ArrayList<Produkt>();
    }

    /**
     * addProdukt
     * ------------------------------------------
     * Legg til et produkt om strekkoden ikke finnes i arkivet
     *
     * @param p
     */
    public void addProdukt(String pNavn, String strk, double iPris, double dPris, double cPris, int aTotalt)
    {
        // Legg til kun om strekkoden ikke eksisterer i arkivet
        if (!this.erAllerede(strk))
        {
            Produkt p = new Produkt(pNavn, strk, iPris, dPris, cPris, aTotalt);
            this.produkter.add(p);
        }
    }

    /**
     * addProduktTilKurv
     * ----------------------------------------
     * Legg til et produkt til handlekurven.
     * Om produktet finnes allerede, oppdater antall i kurv
     *
     * @param p
     */
    public void addProduktTilKurv(Produkt p)
    {
        // Sjekk om produktet finnes allerede basert på strekkode
        if (this.erAllerede(p.getStrekkode()))
        {
            // Produktet finnes allerede, oppdater antall i kurv
            int index = this.finnIndex(p.getStrekkode());
            Produkt a = this.getProdukt(p.getStrekkode());
            a.økAntallIKurv();
            this.produkter.set(index, a);
        }
        else
        {
            // Produktet finner ikke, legg det til
            Produkt b = new Produkt(p.getProduktNavn(), p.getStrekkode(), p.getAntallIKurv(), p.getDeltagerPris());
            this.produkter.add(b);
        }
    }

    /**
     * endreProdukt
     * -----------------------------------------
     * Endre et produkt
     * @param ny
     */
    public void endreProdukt(Produkt ny)
    {
        // Sjekk om arkivet er tomt
        if (!this.produkter.isEmpty())
        {
            // Hent indexen til produktet som skal endres
            int index = this.finnIndex(ny.getStrekkode());

            // Lagre det nye produktet over det gamle
            this.produkter.set(index, ny);
        }
    }

    /**
     * slettProdukt
     * ----------------------------------------
     * Slett et produkt fra arkivet om strekkoden eksisterer
     *
     * @param strekkode
     */
    public void slettProdukt(String strekkode)
    {
        // Sjekk om arkivet er tomt
        if (!this.produkter.isEmpty())
        {
            // Sjekk om produkt med gitt strekkode eksisterer
            if (this.erAllerede(strekkode))
            {
                // Hent index til produktet
                int index = this.finnIndex(strekkode);

                // Fjern produktet fra arkivet
                this.produkter.remove(index);
            }
        }
    }

    /**
     * tømArkiv
     * ----------------------------------------
     * Tømmer arkivet for alle produkter
     *
     */
    public void tømArkiv()
    {
        // Sjekk om arkivet er tom
        if (!this.produkter.isEmpty())
        {
            this.produkter.clear();
        }
    }

    /**
     * getProdukt
     * ---------------------------------------
     * Hent ut ett produkt fra arkivet
     *
     * @param strekkode
     * @return
     */
    public Produkt getProdukt(String strekkode)
    {
        // Sjekk om arkivet er tomt
        if (!this.produkter.isEmpty())
        {
            // Sjekk om produktet finnes i arkivet
            if (this.erAllerede(strekkode))
            {
                // Hent indexen til produktet
                int index = this.finnIndex(strekkode);

                // Returner produktet
                return (Produkt) this.produkter.get(index);
            }
            else
            {
                return null;
            }
        }
        else
        {
            return null;
        }
    }

    /**
     * getProdukter
     * ---------------------------------------
     * Hent ut alle produktene i arkivet
     *
     * @return
     */
    public ArrayList getProdukter()
    {
        return this.produkter;
    }

    /**
     * getAntallProdukter
     * --------------------------------------
     * Hent ut antall produkter i arkivet
     * @return
     */
    public int getAntallProdukter()
    {
        return this.produkter.size();
    }

    /**
     * finnIndex
     * -----------------------------------------
     * Finn indexen til et produkt basert på strekkode
     *
     * @param strekkode
     * @return int
     */
    private int finnIndex(String strekkode)
    {
        // Sjekk om arkivet er tomt
        if (this.produkter.isEmpty())
        {
            return -1;
        }
        else
        {
            for (int i = 0; i < this.produkter.size(); i++)
            {
                Produkt p = (Produkt) this.produkter.get(i);
                if (p.getStrekkode().equals(strekkode))
                {
                    return i;
                }
            }
            return -1;
        }
    }

    /**
     * erAllerede
     * ------------------------------------------
     * Sjekk om ett produkt eksisterer allerede basert på strekkode
     *
     * @param  strekkode
     * @return boolean
     */
    public boolean erAllerede(String strekkode)
    {
        // Sjekk om arkivet er tomt
        if (this.produkter.isEmpty())
        {
            return false;
        }
        else
        {
            for (int i = 0; i < this.produkter.size(); i++)
            {
                Produkt p = (Produkt) this.produkter.get(i);
                if (p.getStrekkode().equals(strekkode))
                {
                    return true;
                }
            }
            return false;
        }
    }
}